La logique de « OU » et de « ET »
Deux piliers soutiennent l'ensemble du domaine de la combinatoire. Leur application dépend entièrement de la manière dont nous considérons une tâche : comme un choix unique parmi plusieurs catégories ou comme une suite de choix.
Si un ensemble $X$ est partitionné en sous-ensembles disjoints $X_1, X_2, \dots, X_n$, alors le nombre total d'éléments $|X|$ est la somme des tailles de ces sous-ensembles :
$$|X| = |X_1| + |X_2| + \dots + |X_n|$$
Analogie : Choisir un repas au Kay’s Quick Lunch en prenant soit un sandwich du menu Principal, soit un hors-d’œuvre du menu des entrées. Vous ne pouvez pas avoir les deux ; vous choisissez un seul plat.
Si une activité se compose de $t$ étapes successives, où l'étape $i$ a $n_i$ résultats possibles, le nombre total de façons de compléter la tâche est le produit des possibilités à chaque étape :
$$N = n_1 \times n_2 \times \dots \times n_t$$
Analogie : Configurer un camion "Big Pickup". Vous devez choisir un moteur (5 options) ET un style de cabine (3 options). Le nombre total de configurations est égal à $5 \times 3 = 15$.
Implémentation en code et complexité
En informatique, ces principes se manifestent dans les structures de boucles. Les boucles séquentielles représentent le principe d'addition, tandis que les boucles imbriquées représentent le principe de multiplication.
pour i = 1 à m : imprimer(i)
pour j = 1 à n : imprimer(j)
// Principe de multiplication (m * n exécutions)
pour i = 1 à m :
pour j = 1 à n :
imprimer(i, j)